home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Source / 3D GrafSys / GrafSys.rel / Demo Sources / CubeDance next >
Text File  |  1992-04-25  |  3KB  |  144 lines

  1. program TestGrafSys;
  2.  
  3. { 3d GrafSys Demo Program}
  4. { Vers. 1.1 }
  5. { (c) 1992 by Christian Franz }
  6.  
  7. { This program demonstates the use of the grafsys for simple animation using }
  8. { the fDrawObject and free rotation command                                                 }
  9. { It also demonstrates the use of AddPoint and AddLine routines for building    }
  10. { 3D objects                                                                                                   }
  11.  
  12.  
  13.     uses
  14.         Grafsys, Screen3D;
  15.  
  16.     const
  17.         theWindowID = 400;
  18.         degree = 0.01745329; (* π/180 *)
  19.  
  20.     var
  21.         theWindow: WindowPtr;
  22.         theInt: INTEGER;
  23.         thePort: Graf3DPtr;
  24.         theMaster: Graf3DPtr;
  25.         Pyramid, Cube, xFighter: GrafObjPtr;
  26.         theEvent: EventRecord;
  27.         dx, dy, dz: integer;
  28.         r: Rect;
  29.         p1, p2: Vector4;
  30.         sign: integer;
  31.  
  32.     procedure MakeCube (var Obj: GrafObjPtr);
  33.  
  34.         var
  35.             count: INTEGER;
  36.             OK: Boolean;
  37.  
  38.     begin
  39.         Obj := NewObject;
  40.  
  41.         OK := AddPoint(Obj, 100, 100.0, -100, count);
  42.         OK := AddPoint(Obj, -100, 100.0, -100, count);
  43.         OK := AddPoint(Obj, -100, -100.0, -100, count);
  44.         OK := AddPoint(Obj, 100, -100.0, -100, count);
  45.  
  46.         OK := AddPoint(Obj, 100, 100.0, 100, count);
  47.         OK := AddPoint(Obj, -100, 100.0, 100, count);
  48.         OK := AddPoint(Obj, -100, -100.0, 100, count);
  49.         OK := AddPoint(Obj, 100, -100.0, 100, count);
  50.  
  51.  
  52.         OK := AddLine(Obj, 1, 2);
  53.         OK := AddLine(Obj, 2, 3);
  54.         OK := AddLine(Obj, 3, 4);
  55.         OK := AddLine(Obj, 4, 1);
  56.  
  57.         OK := AddLine(Obj, 1, 5); (* First side, no NewLine *)
  58.  
  59.         OK := AddLine(Obj, 5, 6);
  60.         OK := AddLine(Obj, 6, 7);
  61.         OK := AddLine(Obj, 7, 8);
  62.         OK := AddLine(Obj, 8, 5);
  63.  
  64.         OK := AddLine(Obj, 2, 6);
  65.  
  66.         OK := AddLine(Obj, 3, 7);
  67.  
  68.         OK := AddLine(Obj, 4, 8);
  69.         OK := AddLine(Obj, 1, 3);
  70.         OK := AddLine(Obj, 2, 4);
  71.  
  72.     end;
  73.  
  74.  
  75.     procedure getmouserot (var dx, dy, dz: integer);
  76.  
  77.         var
  78.             thePoint: point;
  79.  
  80.     begin
  81.         GetMouse(thePoint);
  82.         dx := 0;
  83.         dy := 0;
  84.         dz := 0;
  85.         if (thePoint.h < thePort^.center.h) and (thePoint.v < thePort^.center.v) then (* mouse in quadrant 1 -> xrot*)
  86.             begin
  87.                 dx := 5;
  88.             end;
  89.         if (thePoint.h > thePort^.center.h) and (thePoint.v < thePort^.center.v) then (* mouse in quadrant 2 -> yrot*)
  90.             begin
  91.                 dy := 5;
  92.             end;
  93.         if (thePoint.h > thePort^.center.h) and (thePoint.v > thePort^.center.v) then (* mouse in quadrant 3 -> zrot*)
  94.             begin
  95.                 dz := 5;
  96.             end;
  97.         if (thePoint.h < thePort^.center.h) and (thePoint.v > thePort^.center.v) then (* mouse in quadrant 4 -> idle*)
  98.             begin
  99.             end;
  100.         if button then
  101.             begin
  102.                 dx := -dx;
  103.                 dy := -dy;
  104.                 dz := -dz;
  105.             end;
  106.     end;
  107.  
  108.  
  109. begin
  110.     theWindow := GetNewWindow(theWindowID, nil, Pointer(-1));
  111.     SetPort(theWindow); (* draw in this window *)
  112.     ;
  113.  
  114. {PenMode(patXOR);}
  115.     MoveTo(10, 10);
  116.     DrawString('3D Grafiksystem.             Object: Cube.         (C) 1991 by C. Franz');
  117.     InitGrafSys;
  118.     NewGrafport(theWindow^.portRect, thePort);
  119.     MoveTo(10, thePort^.bottom - 0);
  120.     DrawString(' Press Button to Exit');
  121.     MakeCube(cube);
  122.     SetEye(False, 0, 0, 0, 0, 0, 0, 1.512, FALSE);
  123.     ObjFreeTranslate(cube, 0, 0, 500);
  124.     ObjRotate(cube, 0 * degree, 0 * degree, 0);
  125.     ObjScale(cube, 1, 1, 1);
  126.     SetAutoErase(cube, True);
  127.     p1[1] := 0;
  128.     p1[2] := 0;
  129.     p1[3] := 400;
  130.  
  131.     p2[1] := 0;
  132.     p2[2] := 200;
  133.     p2[3] := 400;
  134.  
  135.     p1[4] := 1;
  136.     p2[4] := 1;
  137.     sign := 1;
  138.     fDrawObject(cube);
  139.     repeat
  140.         fDrawObject(cube);
  141.         ObjRotateArb(cube, p1, p2, 2 * degree); (* although locally done has global effect *)
  142.         ObjRotate(cube, 6 * degree, 0, 0);
  143.     until Button;
  144. end.